package com.br.negocio.controller;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.br.negocio.dao.CargoDAO;
import com.br.negocio.vo.CargoVO;

@Service("controllerCargo")
public class ControllerCargo {

	@Resource
	private CargoDAO cargoDAO;
	
	public void atualizarCargo(CargoVO cargoVO) {
		
		if (cargoVO == null) {
			throw new IllegalArgumentException("Um cargo v�lido � obrigat�rio.");
		}
		
		if ((cargoVO.getDescricao() == null) ||
			(cargoVO.getDescricao().trim().equals(""))) {
			throw new IllegalArgumentException("Uma descricao e necessaria para o cargo.");
		}
		
		if ((!cargoDAO.validaDuplicado(cargoVO)) &&
			(cargoVO.getCodigo() == 0)) {
			throw new IllegalArgumentException("Este cargo ja existe.");
		}

		if (cargoVO.getCodigo() == 0) {
			cargoVO.setDataCriacao(new Date());
			cargoVO.setDataAlteracao(new Date());
			cargoDAO.inserirCargo(cargoVO);
		} else {
			cargoVO.setDataAlteracao(new Date());
			cargoDAO.atualizarCargo(cargoVO);
		}
	}

	public void removerCargo(CargoVO cargoVO) {
		
		if (cargoVO == null) {
			throw new IllegalArgumentException("Um cargo valido e obrigatorio.");
		}
		
		if (cargoVO.getCodigo() == 0) {
			throw new IllegalStateException("A entidade tem um codigo invalido: " + cargoVO.getDescricao());
		}
		
		cargoDAO.removerCargo(cargoVO);
	}

	public CargoVO obterCargo(CargoVO cargoVO) {
		
		if (cargoVO == null) {
			throw new IllegalArgumentException("Um cargo valido e obrigatorio.");
		}

		return cargoDAO.obterCargo(cargoVO);
	}

	public List<CargoVO> obterListaCargo() {
		return cargoDAO.obterListaCargo();
	}
	
}